#ifndef ASTAR_HEURISTIC_POLICIES_H
#define ASTAR_HEURISTIC_POLICIES_H

static Range HeuristicNoisyEuclidianVariation = {0.1, 5.0};

class Heuristic_Noisy_Euclidian
{
public:

  
  Heuristic_Noisy_Euclidian(){}
  
  //calculate the straight line distance from node nd1 to node nd2
  template <class graph_type>
  static double Calculate(const graph_type& G, int nd1, int nd2)
  {
    return (Vec2DDistance(G.GetNode(nd1).Pos(), G.GetNode(nd2).Pos()) * RandInRange(HeuristicNoisyEuclidianVariation.min, HeuristicNoisyEuclidianVariation.max));
  }
};

class Heuristic_Euclid 
{
public:

  Heuristic_Euclid(){}

  //calculate the straight line distance from node nd1 to node nd2
  template <class graph_type>
  static double Calculate(const graph_type& G, int nd1, int nd2)
  {
    return Vec2DDistance(G.GetNode(nd1).Pos(), G.GetNode(nd2).Pos());
  }
};

#endif

